Transaction isolation level
トランザクション分離レベル_
複数のtransactionの相互作用を制御する
複数のtransactionが同時に動くときに、お互いの読み書きをどこまで隔離するかを決定する
性能と整合性のトレードオフがあるので、それを調整するということ
Isolation Level が低いと
同時実行性能が高い
ただし、読み取りの不整合が起こり得る
Isolation Level が高いと
データの整合性は強い
ただし、ロックや待ちが増え性能が下がる
前提として、そもそもどういう不整合が起きうるのか?を知っていると、分離レベルの意義を理解しやすい
Transaction Anomaly
/mrsekut-book-4774171972/363: トランザクションの分離レベル
#wip
極論言えば、全てを直列に実行すれば、どのanomalyも起きない
全てを直列に実行したのと同じ結果になることを保証するのが、一番厳しいSERIALIZABLEである
それ以外の分離レベルでは、Transaction Anomalyを完全に防ぐことはできない
例えばロックをかけて同時に実行するのを防止する
MVCC
標準的な4種類の Isolation Level
以下は ANSI SQL の4段階
(実際には DB 実装によって挙動がずれることがある)
table:_
アノマリ / 分離レベル ①Read Uncommitted ②Read Committed ③Repeatable ④Serializable
Dirty Read ✔ 発生 ✖ 防止 ✖ 防止 ✖ 防止
Non-repeatable Read ✔ 発生 ✔ 発生 ✖ 防止 ✖ 防止
Phantom Read ✔ 発生 ✔ 発生 ✔ 発生 ✖ 防止
Read Skew ✔ 発生 ✔ 発生 △ 多くは防止 ✖ 防止
Inconsistent Read ✔ 発生 ✔ 発生 △ 多くは防止 ✖ 防止
Lost Update △ 実装依存 △ 実装依存 △ 実装依存(DB差) ✖ 防止
Write Skew △ 実装依存 △ 実装依存 ✔ 発生 ✖ 防止
Read Only Anomaly △ 実装依存 △ 実装依存 △ 実装依存 ✖ 防止
④に行くほど厳しい
つまり不整合は起きづらくなる
が、性能は低くなる
https://qiita.com/song_ss/items/38e514b05e9dabae3bdb
https://www.kimullaa.com/entry/2020/03/14/134232
https://speakerdeck.com/soudai/webenzinianizhi-tutehosiirdbantipatan?slide=78
https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html
mysql
gpt-5.icon
🔍 4. DBごとの挙動の違い(重要)
DB実装ごとに Isolation Level の内部動作が違う点は非常に重要。
table:_
DB デフォルト 特記事項
PostgreSQL READ COMMITTED SERIALIZABLE は SSI(Serializable Snapshot Isolation)で実現
MySQL InnoDB REPEATABLE READ MVCCが強力で Phantom Read を防ぐ(実質 Serializable寄り)
Oracle READ COMMITTED 実装は独自(Snapshot based)
特に MySQL InnoDB の REPEATABLE READ は ANSI と挙動が違うというのはポイント。